#if !defined(__SERVEUR_RESEAU_H)
#define __SERVEUR_RESEAU_H

#include "reseau.h"
#include "emetteur.h"
#include "recepteur.h"

/**
 * Gère une connexion avec une identité de serveur.
 * L'opération accepter est bloquante.
 */
class serveur_reseau : dependant_de<reseau> {
    IPaddress adresse_serveur_, adresse_client_udp_;
    IPaddress *adresse_client_;
	int port_udp_client_, port_udp_serveur_;
    bool occupe_;
    TCPsocket chaussette_tcp_ecoute_, chaussette_tcp_client_;
    UDPsocket chaussette_udp_;
    SDLNet_SocketSet assortiment_de_chaussettes_;
	recepteur_reseau *recepteur_;
	emetteur_reseau *emetteur_;
public:
    serveur_reseau(int port_serveur = PORT_SERVEUR_DEFAUT); 
    ~serveur_reseau() throw();
    void accepter_connexions();
    void deconnecter();
    bool occupe() const;
	
	emetteur_reseau &emetteur() {
		return *emetteur_;
	}
	
	recepteur_reseau &recepteur() {
		return *recepteur_;
	}
};

#endif
